<?php
namespace app\common\model;

use think\Model;
use app\common\model\Sms;


/**
 * php 环境须装有 curl 模块和 json 模块才能正常使用该程序, 本页面使用 utf-8 编码， 短信
 * 内容为 utf-8 编码
 **/
class SmsLogic extends Model
{

    /**
     * 验证码有效时长
     * @var int
     */
    protected static $expire = 300; //120

    /**
     * 最大允许检测的次数
     * @var int
     */
    protected static $maxCheckNums = 10;

    var $username = "shanda"; //在这里配置你们的发送帐号
    var $passwd = "shanda888"; //在这里配置你们的发送密


    /**
     **发送短信函数
     **$mobile 为手 机号 码， 可以一 个或 多个号 码， 多个 号码以 “, ” 号隔 开 例：
     * 13800000000,13800000000
     **$content 为短信内容， 请发正规的验证码或行业通知类的内容和带签名,测试用例请
     * 发： "你好， 你的验证码为： 666888.【 金博软件】 "
     **$sendtime 为发送时间， 为空立即发送， 时间格式为： "2016-12-12 12:12:12"
     **$port 为端口号， 默认为空
     **$needstatus 是否需要状态回推,值为 true 或 false,回推地址在后台设置
     **所有线上公开促发短信发送的接入， 比如公开的验证码、 注册等必须加以判断每个
     * 号码的发送限制、 ip 发送短信限制
     **/
    public function sendMessage($phone, $msg, $sendtime = '', $port = '', $needstatus = '')
    {

        $ch = curl_init();
        $post_data =
            "account=" . $this->username . "&password=" . $this->passwd . "&mobile=" . $phone . "&content=" . urlencode($msg) . "&needstatus=true&port=" . $port . "&sendtime=" . $sendtime;
        /**
         * php5.4 或 php6 curl 版本的 curl 数据格式为数组 你们接入时要注意
         * $post_data = array(
         * "account"="账号",
         * "password"="密码",
         * "mobile"="手机号码 1,号码 2,号码 3".
         * "content"="您好,你的验证码:8888【 金博软件】 ",
         * "needstatus"="true",
         * "port"='',
         * "sendtime"=''
         * );
         **/
        curl_setopt($ch, CURLOPT_URL, "http://sms.kingbooe.com/SMSAPI/Send");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $file_contents = curl_exec($ch);
        curl_close($ch);
        return json_decode($file_contents);
    }

    public function checkCode($mobile,$code,$event = 'register'){
        $event = empty($event) ? 'register' : $event;

        $smsModel = new Sms();
        $time = time() - self::$expire;
        $sms = $smsModel->where(['mobile'=>$mobile,'event' => $event])->order('id desc')->find();

        if($sms){

            if ($sms['createtime'] > $time && $sms['times'] <= self::$maxCheckNums)
            {

                $correct = $code == $sms['code'];

                if (!$correct)
                {
                    $sms->times = $sms->times + 1;
                    $sms->save();
                    return $res = [
                        'code' => '0',
                        'msg' => '验证码不正确',
                        
                        'data' => '',
                    ];
                }
                else
                {

                    return $res = [
                        'code' => '1',
                        'msg' => '验证成功',
                        
                        'data' => '',
                    ];
                }
            }
            else
            {
                // 过期则清空该手机验证码
                self::flush($mobile,$event);

                return $res = [
                    'code' => '0',
                    'msg' => '验证码过期',
                    
                    'data' => '',
                ];
            }

        }else{
            return $res = [
                'code' => '0',
                'msg' => '未收到验证码',
                
                'data' => '',
            ];
        }

    }

    //清空制定手机号
    public static function flush($mobile,$event){
        $smsModel = new Sms();
        $smsModel->where(['mobile'=>$mobile,'event' => $event])->delete();

    }


}